home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 9 / The PC-SIG Library on CD ROM - Ninth Edition.iso / 001_100 / DISK0070 / DISK0070.ZIP / DC-SORT.BAS < prev    next >
BASIC Source File  |  1983-07-27  |  7KB  |  162 lines

  1. 1 '                 DISKCAT SORT/PRINT PROGRAM
  2. 2 '      (C) COPYRIGHT 1983 NELSON FORD  ALL RIGHTS RESERVED
  3. 3 '
  4. 10 SCREEN 0,1: WIDTH 80
  5. 20 DEFINT A-Z:    DIM F$: F$=":diskcat.dta"
  6. 23 BG=0: IF (PEEK(&H410) AND &H30)<>&H30 THEN FG=6 ELSE FG=7
  7. 24 COLOR FG, BG, BG
  8. 30 DIM X, X$, JOB, D$(2), Y$, I, N$(2,2000), LAST(2), STACK(20), N(2,2000)
  9. 40 CLS: PRINT TAB(30) "D I S K C A T":  LOCATE 5,1,0:  X=20
  10. 50 PRINT TAB(X) "1  Compare two DISKCAT.DTA files"
  11. 60 PRINT TAB(X) "2  Print DISKCAT.DTA sorted by file name"
  12. 65 PRINT TAB(X) "3  Print DISKCAT.DTA sorted by disk name"
  13. 70 PRINT TAB(X) "4  Print DISKCAT.DTA sorted by file type"
  14. 80 PRINT TAB(X) "5  Print DISKCAT.DTA sorted by file extension"
  15. 90 PRINT TAB(X) "6  Return to main program"
  16. 95 PRINT TAB(X) "7  Return to DOS": PRINT
  17. 100 PRINT TAB(X) "   Select";
  18. 110 LOCATE,X: GOSUB 150
  19. 120 IF X$<"1" OR X$>"7" THEN 110  ELSE JOB= VAL(X$)
  20. 130 ON JOB GOTO 1000,2000,2000,2000,2000,131,135
  21. 131 '
  22. 132 PRINT:PRINT:PRINT TAB(X) "What drive is DISKCAT on?  ";: GOSUB 150
  23. 133 X$=X$+":diskcat":  CHAIN X$
  24. 134 '
  25. 135 END
  26. 139 '
  27. 140 ''''''''''get keypress:
  28. 141 '
  29. 150 COLOR 16,FG: PRINT CHR$(219) CHR$(29);: COLOR FG,BG
  30. 160 X$=INKEY$: IF X$="" THEN 160 ELSE PRINT X$;
  31. 170 IF X$=CHR$(27) THEN RUN
  32. 171 IF X$=CHR$(3) THEN END ELSE RETURN
  33. 180 '
  34. 190 ''''''''''sort:
  35. 191 '
  36. 200 CLS: LOCATE 12,35: PRINT "SORTING": TOP=0 : LO=1 : HI=LAST(S)
  37. 210   WHILE 1
  38. 220    WHILE LO < HI
  39. 230 IF HI-LO >1 THEN GOTO 260
  40. 240 IF N$(S,LO)<=N$(S,HI) THEN 320
  41. 250 SWAP N$(S,LO),N$(S,HI): SWAP N(S,LO),N(S,HI)
  42. 260 J=HI+1: GOSUB 350
  43. 270 IF J-LO >= HI-J THEN GOTO 290
  44. 280 STACK(TOP+1)=J+1: STACK(TOP+2)=HI:     HI=J-1 : GOTO 300
  45. 290 STACK(TOP+1)=LO:  STACK(TOP+2)=J-1:  LO=J+1
  46. 300 TOP=TOP+2
  47. 310    WEND
  48. 320 IF TOP=0 THEN RETURN
  49. 330 HI=STACK(TOP) : LO=STACK(TOP-1) : TOP=TOP-2
  50. 340   WEND
  51. 350 '
  52. 360 CK.PT$= N$(S,LO) : I=LO
  53. 370   WHILE 1
  54. 380 I=I+1 : IF N$(S,I) < CK.PT$ AND I<HI THEN GOTO 380
  55. 390 J=J-1 : IF N$(S,J) > CK.PT$ THEN GOTO 390
  56. 400 IF I<J THEN SWAP N$(S,I),N$(S,J): SWAP N(S,I), N(S,J)  ELSE GOTO 420
  57. 410   WEND
  58. 420 SWAP N$(S,LO),N$(S,J):  SWAP N(S,LO), N(S,J): RETURN
  59. 430 '
  60. 998 '''''''''''''compare two diskcat files:
  61. 999 '
  62. 1000 CLS:LOCATE 10,10: PRINT "Enter drives to access (must be different): ";
  63. 1010 GOSUB 150: D$(1)=X$: PRINT "  ";:  GOSUB 150:  D$(2)=X$
  64. 1020 IF D$(1)=D$(2) THEN BEEP: PRINT " different? ";: GOTO 1020
  65. 1030   FOR S=1 TO 2
  66. 1040 CLS: LOCATE 12,30: PRINT "Loading DISKCAT.DTA" S:  J=0
  67. 1050 OPEN D$(S)+F$ AS 1 LEN=74:  FIELD 1, 12 AS X$, 62 AS Y$:  FIELD 1,1 AS T$
  68. 1060 GET 1: IF T$<>"\" AND T$<>" " THEN J=J+1: N$(S,J)=X$: N(S,J)=J: GOTO 1060
  69. 1070 CLOSE:  LAST(S)= J:  GOSUB 200  'go sort
  70. 1080    NEXT
  71. 1090 'print comparison:
  72. 1100 I=1:  J=1:  L=1:  CLS:  CLOSE
  73. 1110 LOCATE 12,5: PRINT"Print comparative lists to [1] Screen or [2] Printer? ";
  74. 1120 GOSUB 150
  75. 1130 IF X$="1" THEN O$="scrn:" ELSE IF X$="2" THEN O$="lpt1:": GOSUB 1250            ELSE 1120
  76. 1140 OPEN O$ FOR OUTPUT AS #1:    CLS
  77. 1142 OPEN D$(1)+F$ AS 2 LEN=74
  78. 1143 FIELD 2, 12 AS NM$, 8 AS DSK$, 35 AS Y$, 10 AS DT$, 7 AS SZ$, 2 AS Y$
  79. 1144 FIELD 2, 1 AS T$, 73 AS Y$
  80. 1145 OPEN D$(2)+F$ AS 3 LEN=74
  81. 1146 FIELD 3, 12 AS NM2$, 8 AS DSK2$, 35 AS Y$, 10 AS DT2$, 7 AS SZ2$, 2 AS Y$
  82. 1147 FIELD 3, 1 AS T2$, 73 AS Y$
  83. 1150 GET 2, N(1,I):  GET 3, N(2,J)
  84. 1151 IF NM$<>NM2$ OR SZ$<>SZ2$ THEN 1160
  85. 1152 PRINT #1, NM$"  "SZ$"  "DSK$ TAB(40) NM2$"  "SZ2$"  "DSK2$:  I=I+1: J=J+1:      GOTO 1165
  86. 1160 IF NM$<=NM2$ THEN PRINT #1, NM$"  "SZ$"  "DSK$: I=I+1: GOTO 1170                ELSE  PRINT TAB(40) NM2$"  "SZ$"  "DSK$: J=J+1: GOTO 1170
  87. 1165 Q$=INKEY$: IF Q$="" THEN 1170 ELSE L=CSRLIN
  88. 1166 LOCATE 25,3: PRINT"1-Continue  2-Start printing over  3-Start program over  4-End  ";: GOSUB 150:  IF X$="1" THEN LOCATE L,1: GOTO 1170
  89. 1167 IF X$="2" THEN 1100  ELSE IF X$="3" THEN RUN
  90. 1169 IF X$="4" THEN END ELSE 1166
  91. 1170 L=L+1: IF O$="lpt1:"  THEN 1210
  92. 1180 IF L<=20 THEN 1200 ELSE PRINT: PRINT "Press Enter to continue."
  93. 1190 GOSUB 150: L=1: CLS
  94. 1200 GOTO 1230
  95. 1210 IF L<=50 THEN 1230
  96. 1220 LPRINT CHR$(12): GOSUB 1260: L=1
  97. 1230 IF I=<LAST(1) OR J<=LAST(2) THEN 1150
  98. 1240 GOSUB 150: RUN
  99. 1250 CLS: LOCATE 12,20: PRINT "PREPARE PRINTER & PRESS ENTER ";: GOSUB 150
  100. 1260 LPRINT TAB(30) "DISKCAT CATALOG COMPARISON": LPRINT
  101. 1262 LPRINT STRING$(31,"-") TAB(40) STRING$(31,"-")
  102. 1263 LPRINT " FILE NAME      SIZE     DISK" TAB(40) "";
  103. 1264 LPRINT " FILE NAME      SIZE     DISK"
  104. 1265 LPRINT "------------  -------  --------" TAB(40) "";
  105. 1266 LPRINT "------------  -------  --------"
  106. 1269 LPRINT: RETURN
  107. 1270 '
  108. 2000 ''''''''''''''print sorted by other fields:
  109. 2001 '
  110. 2010 CLS: LOCATE 12,20: PRINT "Which drive has DISKCAT.DTA? ";
  111. 2020 GOSUB 150: D$(1)=X$: CLS: LOCATE 12,30: PRINT "Loading data"
  112. 2030 OPEN D$(1)+F$ AS 1 LEN=74:   FIELD 1, 1 AS T$
  113. 2040 FIELD 1, 12 AS W$, 62 AS Y$                           'by name
  114. 2045 IF JOB=3 THEN FIELD 1, 12 AS Y$,  8 AS X$, 54 AS Y$   'by disk
  115. 2050 IF JOB=4 THEN FIELD 1, 20 AS Y$, 10 AS X$, 44 AS Y$   'by type
  116. 2060 IF JOB=5 THEN FIELD 1,  9 AS Y$,  3 AS X$, 62 AS Y$   'by ext.
  117. 2065 J=0:  I=0
  118. 2070 GET 1: I=I+1
  119. 2075 IF T$<>"\" AND T$<>" " THEN IF T$<>"z" THEN J=J+1: N$(1,J)=X$+W$: N(1,J)=I:     GOTO 2070 ELSE 2070
  120. 2080 LAST(1)= J
  121. 2090 S=1: GOSUB 200
  122. 2400 CLS: CLOSE: LOCATE 10
  123. 2410 PRINT TAB(30) "1  To printer"
  124. 2420 PRINT TAB(30) "2  To screen"
  125. 2430 PRINT TAB(30) "3  To disk file":  PRINT: PRINT TAB(30) "  Select";
  126. 2440 LOCATE,30:  GOSUB 150:  CLS: ON VAL(X$) GOTO 2450,2460,3000
  127. 2450 CLS: LOCATE 12,20: PRINT "Prepare printer & press Enter  ";: GOSUB 150
  128. 2451 OPEN "lpt1:" FOR OUTPUT AS #2
  129. 2452 GOTO 2500
  130. 2460 OPEN "scrn:" FOR OUTPUT AS #2
  131. 2500 '
  132. 2520 GOSUB 2610   'print page heading
  133. 2530 OPEN D$(1)+F$ AS 1 LEN=74
  134. 2540 FIELD 1, 12 AS NM$, 8 AS DSK$, 10 AS TY$, 25 AS DESCR$, 10 AS DT$, 7 AS SZ$    ,2 AS E$
  135. 2550   FOR I=1 TO LAST(1)
  136. 2560 GET 1, N(1,I)
  137. 2570 PRINT #2, NM$ " " DSK$" "TY$" "DESCR$" "DT$" "USING "###,###"; VAL(SZ$)
  138. 2571 Q$=INKEY$: IF Q$="" THEN 2580 ELSE L=CSRLIN
  139. 2572 LOCATE 25,3: PRINT"1-Continue  2-Start printing over  3-Start program over  4-End  ";: GOSUB 150:  IF X$="1" THEN LOCATE L,1: GOTO 2580
  140. 2573 IF X$="2" THEN 2400  ELSE IF X$="3" THEN RUN
  141. 2574 IF X$="4" THEN END ELSE 2571
  142. 2580 L=L+1: IF L>55 THEN PRINT #2, CHR$(12): GOSUB 2610
  143. 2590   NEXT
  144. 2600 CLOSE: GOSUB 150: RUN
  145. 2610 PRINT #2, TAB(30) "DISKCAT File Listing": PRINT #2, "":  L=1
  146. 2620 PRINT #2, " FILE NAME     DISK   FILE TYPE       DESCRIPTION             DATE      SIZE"
  147. 2630 PRINT #2, "------------ -------- --------- -------------------------  ---------- -------"
  148. 2640 RETURN
  149. 3000 LOCATE 12,20: LINE INPUT "enter output filename:  "; FI$
  150. 3010 CLS:' LOCATE 12,30: PRINT "doing it":
  151. 3020 OPEN D$(1)+F$ AS 1 LEN=74:  FIELD 1, 74 AS A$
  152. 3030 OPEN FI$ AS 2 LEN=74:       FIELD 2, 74 AS B$
  153. 3040   FOR I=1 TO LAST(1)
  154. 3050 GET 1,N(1,I):  LSET B$= A$:  PUT 2,I
  155. 3055 PRINT B$
  156. 3060   NEXT
  157. 3070 CLOSE:  CLOSE: RUN
  158. B$
  159. 3040   FOR I=1 TO LAST(1)
  160. 3050 GET 1,N(1,I):  LSET B$= A$:  PUT 2,I
  161. 3055 PRINT B$
  162. 3060   NEX